package main

import "fmt"

//defer 与 return 谁先执行？

//定义一个全局变量
var name string = "go"

func myfunc() string {

	//用defer调用一个匿名函数，该函数改变了全局变量的值
	defer func() {
		name = "python"
	}()
	fmt.Printf("myfun函数里的name:%s\n", name) //输出go，因为defer会延迟执行。这里很明确
	return name                            //重点是这里，return会在defer之前执行。所以仍然会返回go
}

func main() {
	re := myfunc()                        //调用这个函数，得到字符串的返回
	fmt.Printf("main函数里的name:%s\n", name) //得到python。因为整个myfunc已经执行完成了。所以defer中的代码也被执行了
	fmt.Println("main 函数里的re: ", re)      //得到go，因为myfunc在return时，defer中的代码，还没有被执行

}
